A common arrangement for low end microcomputer systems places system elements, such as the central processing unit (CPU), main memory (e.g., random access memory, or RAM), read only memory (ROM) and Input/Output (I/O) devices, on the same main bus. Communication on the main bus is through the CPU, an arrangement that can result in unacceptably slow transfer of data (e.g., from an I/O device to RAM). Moreover, devices on the main bus with lower priority, such as I/O devices, face long waits to transfer data.
In response to these shortcomings, Direct Memory Access (DMA) controllers were developed. A DMA controller connects to the main bus, and is responsible for controlling data signal transfers on the main bus between RAM and I/O devices. To make data signal transfers, a DMA controller takes control of the main bus when the CPU is not using it (i.e., cycle stealing). Although DMA controllers generally perform adequately, DMA controllers suffer from certain limitations. With a DMA controller, the rate of data transfer is limited by how frequently the CPU allows the DMA controller to gain control of the main bus, and how long the DMA controller can keep control of the main bus. Moreover, DMA controllers are not designed to facilitate data signal transfers between I/O devices: Typically a DMA controller transfers data signals to or from a particular (i.e., addressed) memory location in RAM one word at a time. Moreover, the DMA controller typically assumes the RAM will be available to receive a word. This is a safe assumption for most RAMs, which have relatively quick access times, but may not be a safe assumption for an I/O device.
Another response to the shortcomings of using only the main bus was the mezzanine bus. A mezzanine bus is a second or auxiliary bus that is parallel to the main bus, and also is connected to the main bus through a bus to bus interface. The mezzanine bus connects most, if not all, of the I/O devices that would otherwise connect directly to the main bus. In this manner, the I/O devices on the mezzanine bus can transfer data signals between each other without the need to communicate over the main bus. The mezzanine bus includes a bus controller, and may even include a DMA controller. Although mezzanine busses have generally proven adequate, particularly when combined with DMA controllers, there remains inadequacies in transferring data signals between I/O devices. In addition to the inadequacies of the DMA controllers, discussed above, typically the mezzanine bus approach fails to take into account the unique nature of I/O device to I/O device transfers, in which although it is not known in advance when I/O devices will need to transfer data signals to other I/O devices, it is often known in advance what I/O devices need to communicate with each other.